package day06;

// 字符串转整数

// 修改正确版本
public class Main2 {
    public int StrToInt(String str) {
        // 首先将字符串转为数组
        char[] ch = str.toCharArray();
        // 判空
        if(str.isEmpty()) {
            return 0;
        }
        // 正负号处理
        int symbol = 1; // 记录正负数情况，默认是正数
        if(ch[0] == '+') {
            symbol = 1;
            ch[0] = '0';  // 该位是决定正负数的，使用完之后就置零,便于后续计算值
        }
        if(ch[0] == '-') {
            symbol = -1;
            ch[0] = '0';  // 该位是决定正负数的，使用完之后就置零，便于后续计算值
        }

        // 进行遍历求整数，同时判断是否有非法字符
        int sum = 0;
        // 注意，循环还必须从0开始，因为不确定首尾到底是不是符号位
        for (int i = 0; i < ch.length; i++) {
            if(ch[i]<'0' || ch[i]>'9') {
                // 这里是不合法的情况
                sum = 0;
                break;
            }
            // 这里是合法的，那就进行整数计算
            // 是从左到右的，每次*10+当前数就行
            // 还要注意一个点：ch[i]的元素类型是char，要以整数方式需要每个字符-'0'
            sum = sum*10 + ch[i] - '0';
        }


        // 最后返回结果
        sum = sum * symbol; // 千万不要忘记符号！
        return sum;
    }
}






// 还是存在问题
//
//public class Main2 {
//    public static void main(String[] args) {
//        String str = "+123456";
//        Main2 main2 = new Main2();
//        System.out.println(main2.StrToInt(str));
//    }
//
//    public int StrToInt(String str) {
//        // 遍历字符串：查看有无不合法字符
//        if(str.charAt(0)=='+' || str.charAt(0)=='-' ||
//                (str.charAt(0)>='0' && str.charAt(0)<='9')) {
//            // 说明是第一个是合法的
//            for (int i = 1; i < str.length(); i++) {
//                if(str.charAt(i)>='0' && str.charAt(i)<='9') {
//                    continue;
//                } else {
//                    return 0;
//                }
//            }
//            // 来到这儿：说明合法
//        }
//        // 开始进行转换:*10^(n-1)
//        // 字符-'0' ==数字
//        int num = 0;
//        for (int i = 1; i < str.length(); i++) {
//            // 先忽略最开始
//            num += (int)((str.charAt(i)-'0')*(Math.pow(10,str.length()-1-i)));
//        }
//        // 再来考虑最开始
//        if(str.charAt(0)=='+') {
//            num *= 1;
//        } else if(str.charAt(0)=='-') {
//            num *= -1;
//        } else {
//            num += (int)((str.charAt(0)-'0')*(Math.pow(10,str.length()-1)));
//        }
//
//        return num;
//    }
//}
